/*
 * DeltaBChangeTrim.java
 *
 * Created on 29 Июнь 2008 г., 17:28
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package trim.calc;

import java.io.IOException;
import java.io.InputStream;
import trim.Trim;
import trim.common.inputdata.InputData;
import trim.common.result.TrimResult;


/**
 * Алгоритм основанный на подборе ВТ, таким образом, чтобы
 * целая часть решения совпала с заданным ВТ
 * <p>Алгоритм:</p>
 * <pre>
 * Ax0=b0,z0=b0-A[x0], b1=b0+z0
 * Ax1=b1,z1=b0-A[x1], b2=b1+z1
 * .......
 * </pre>
 * @author Дмитрий
 */
public class DeltaBChangeTrim extends Trim
{

  /** Creates a new instance of DeltaBChangeTrim */
  public DeltaBChangeTrim()
  {
  }

  

  public TrimResult solve(InputData inputData)
  {
//    inputData=inputData.clone();
//    int i,j,k;
//    //int ResPosition;//позиция последнего элемента в массиве результатов
//    double LeftTambur=0.0;
//
//
//    {
//      //сохраняем исходный ВТ
//      int[] b0=new int[n];
//      int[] z=new int[n];
//      int[] L1=new int[n];
//      for(i=0;i<n;i++)
//        L1[i]=b0[i]=L[i];
//      int d;
//      SMResult res=null,minRes=null;
//      List<int[]> vt=new LinkedList();
//      boolean cicle=false;
//
//      do
//      {
//        for(i=0;i<n;i++)
//          L1[i]=L[i]=L1[i]+z[i];
//        for(i=0;i<vt.size()&&!cicle;i++)
//        {
//          int[] t=vt.get(i);
//          cicle=true;
//          for(j=0;j<n;j++)
//            cicle&=t[j]==L[j];
//        }
//        d=0;
//        if(cicle)continue;
//        vt.add(L);
//        res=Simplex();
//        LeftTambur=res.getObjectiveFuncValue();//SMExtractResult(n,n);
//        if(LeftTambur-(int)LeftTambur>1e-9)LeftTambur=(int)LeftTambur+1;
//        res=res.getIntResult();
//        if(minRes==null||minRes.getTail(S)>res.getTail(S))
//          minRes=res;
//        LeftTambur-=(int)res.getObjectiveFuncValue();
//        for(i=0;i<n;i++)
//          L[i]=b0[i];
//
//        SMExtractRest(res,L);
//        d=0;
//        for(i=0;i<n;i++)
//        {
//          z[i]=L[i];
//          d+=Math.abs(z[i]);
//        }
//      }while(d>0&&!cicle);
//      if(d==0)
//        tr.addSMResult(minRes,C,S);
//      else
//        tr.addSMResult(res,C,S);
//    }//конец СМ
//
//    //применение BP
//    /*BPData d=BPInitData(UseSimplex,(int)LeftTambur);
//    if(d.formatCount>0)d.BPTmpRes[0]=-100000;
//    BPResult bpRes=null;
//    while(d.formatCount>0&&d.BPTmpRes[0]==-100000)
//    {
//      bpRes=BestPartition(0,d.formatCount,0,0,S,KnifeCount-1,d);
//      d.minm++;
//      d.tailm+=S;
//    }
//    tr.addBPResult(bpRes);*/
//    //конец BP
//    return tr;
    throw new UnsupportedOperationException();
  }
  @Override
  public String getName()
  {
    return this.getClass().getSimpleName();
  }

  @Override
  public String getVersion()
  {
    InputStream is=getClass().getResourceAsStream("/trim/calc/version");
    byte[] b=new byte[20];
    try{
     int n=is.read(b);
      return new String(b,0,n);
    }catch(IOException ex){
      ex.printStackTrace();
      return "0";
    }
  }

  @Override
  public String getDescription()
  {
    return "Алгоритм основанный на подборе ВТ, таким образом, чтобы" +
            " целая часть решения совпала с заданным ВТ" +
            " <p>Алгоритм:</p>" +
            " <pre>" +
            " Ax0=b0,z0=b0-A[x0], b1=b0+z0" +
            " Ax1=b1,z1=b0-A[x1], b2=b1+z1" +
            " ......." +
            " </pre>";
  }
}
